package zredis

import (
	"github.com/gomodule/redigo/redis"
)

func Increment(key string) int64 {
	conn, err := GetConn()
	if err != nil {
		return 0
	}
	defer autoClose(conn)

	value, err := redis.Int64(conn.Do("INCR", key))
	if err == nil {
		return value
	}
	return 0
}

func Set(key, value any) (err error) {
	conn, errConn := GetConn()
	if errConn != nil {
		return errConn
	}
	defer autoClose(conn)

	_, err = conn.Do("Set", key, value)
	return
}

func Get(key string) (value string, err error) {
	conn, errConn := GetConn()
	if errConn != nil {
		return "", errConn
	}
	defer autoClose(conn)

	value, err = redis.String(conn.Do("Get", key))
	return
}

func SetEx(key, value string, ttl int) (err error) {
	conn, errConn := GetConn()
	if errConn != nil {
		return errConn
	}
	defer autoClose(conn)

	_, err = conn.Do("Set", key, value, "EX", ttl)
	return
}

func GetString(key string) string {
	conn, errConn := GetConn()
	if errConn != nil {
		return ""
	}
	defer autoClose(conn)

	value, err := redis.String(conn.Do("Get", key))
	if err == nil {
		return value
	}
	return ""
}

func GetInt64(key string) int64 {
	conn, errConn := GetConn()
	if errConn != nil {
		return 0
	}
	defer autoClose(conn)

	value, err := redis.Int64(conn.Do("Get", key))
	if err == nil {
		return value
	}
	return 0
}
